/**
 * 4. 寻找两个正序数组的中位数
给定两个大小分别为 m 和 n 的正序（从小到大）数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
示例 1：

输入：nums1 = [1,3], nums2 = [2]
输出：2.00000
解释：合并数组 = [1,2,3] ，中位数 2
示例 2：

输入：nums1 = [1,2], nums2 = [3,4]
输出：2.50000
解释：合并数组 = [1,2,3,4] ，中位数 (2 + 3) / 2 = 2.5
示例 3：

输入：nums1 = [0,0], nums2 = [0,0]
输出：0.00000
示例 4：

输入：nums1 = [], nums2 = [1]
输出：1.00000
示例 5：

输入：nums1 = [2], nums2 = []
输出：2.00000

提示：

nums1.length == m
nums2.length == n
0 <= m <= 1000
0 <= n <= 1000
1 <= m + n <= 2000
-106 <= nums1[i], nums2[i] <= 106
 
进阶：你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗？

 * @param nums1 
 * @param nums2 
 * @returns 
 */

function findMedianSortedArrays(nums1: number[], nums2: number[]): number {
    let midLeft = 0;
    let midRight = 0;
    const m = nums1.length;
    const n = nums2.length;
    let point1 = 0;
    let point2 = 0;
    for (let i = 0; i <= (m + n) / 2; i++) {
        midLeft = midRight;
        if (
            point1 < m && // 数组1未遍历完
            (point2 >= n || // 数组2已遍历完
                nums1[point1] < nums2[point2]) // 或者数组1的当前值小于数组2的当前值
        ) {
            // 将数组1当前值作为中位数, 指针1++
            midRight = nums1[point1++];
        } else {
            // 反正则将数组2当前值作为中位数, 指针2++
            midRight = nums2[point2++];
        }
    }
    // 数组长度为偶数时，中位数为中间两数的平均值；长度为奇数时，中位数为中间数
    return (m + n) % 2 === 0 ? (midLeft + midRight) / 2 : midRight;
}

console.log(
    "findMedianSortedArrays [1, 2], [3]:",
    findMedianSortedArrays([1, 2], [3])
);

export { findMedianSortedArrays };
